在ARM64系统上部署Redis(单机和集群) 您所在的位置:网站首页 centos redis离线安装 在ARM64系统上部署Redis(单机和集群)

在ARM64系统上部署Redis(单机和集群)

2023-09-16 02:23| 来源: 网络整理| 查看: 265

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用 ANSI C 语言编写、支持网络、基于内存但也可持久化的高性能 Key-Value 数据库,它提供多种语言的API。 

1 Redis 安装与运行 1.1 安装

Redis 的安装有两种方式,一种是从源码编译安装,一种是通过系统自带的软件源进行安装,但官方推荐第一种,因为软件源中的版本通常比较旧。另外 Redis 的源码包非常小,只有 2M 左右,编译起来不会耗费太多时间。

目前 redis 最新版本为 6.0.5,但在实际编译过程中,由于我们选用的 CentOS 系统安装的 gcc 版本较低(4.8.5),编译会遇到错误。因此要么使用版本 5 的 Redis,要么升级 gcc 版本(>=4.9)。我们这里选择前者。

1.1.1 下载

首先下载 Redis 的最新稳定版本:

wget http://download.redis.io/releases/redis-5.0.8.tar.gz

 

1.1.2 编译 tar xvzf redis-5.0.8.tar.gz cd redis-5.0.8 make

 

1.1.3 可能遇到的错误

1)没有安装编译环境

如果没有安装编译环境的话,编译会遇到错误:

安装编译环境:

yum install gcc

这时如果直接执行 make 编译的话仍然会遇到错误:

如果搜索错误相关信息 “redis jemalloc”的话,多数答案会说这是系统没有安装 jemalloc 的问题,并提供错误的解决方案:

make MALLOC=libc

上面的编译参数将 jemalloc 替换为了 libc,这是存在隐患的,首先我们要知道 redis 是需要使用内存分配器的, make MALLOC=jemalloc 就是指定内存分配器为 jemalloc ,make MALLOC=libc 就是指定内存分配器为 libc ,而 jemalloc 内存分配器在实践中处理内存碎片要比 libc 更好,而且在 README.md 文档也说明到了,jemalloc 内存分配器也是包含在源码包里面的,可以在 deps 目录下看到 jemalloc 目录。

实际上出现这个错误这是因为在安装 gcc 前执行的 make 编译操作失败了,有残留的错误文件,我们只需要清理一下就可以了再次编译了:

make distclean && make

 

2)库文件链接错误

上面的步骤都做完后,还可能遇到编译不通过的情况:

"/usr/bin/ld: cannot find -latomic"

latomic 代表的是 libatomic.so,也即是在编译的过程中,需要 libatomic.so 库,而系统又找不到这个库;

解决方法是手动找到这个库,可能存在如下几种情况:

1、系统中没有安装依赖库 libatomic.so,通过执行 find / -name "libatomic.so*" 来确认。

如果没有的话,在软件源中搜索相关的软件包:

yum list |grep libatomic

解决方法:通过执行 yum -y install libatomic libatomic_ops-devel 安装相关依赖。

 

2、系统中没有 libatomic.so 这个库,但是找到类似 libatomic.so.1.2.0 这种带版本号的库,通过执行 find / -name "libatomic.so*"来确认:

解决方法:使用软链接的方法将依赖库libatomic.so链接到正确路径,执行如下命令:

ln -s /usr/lib64/libatomic.so.1.2.0 /usr/lib/libatomic.so

再执行 make 编译,问题解决。

这时在 src 目录中能够看到已经编译好的 redis 可执行文件:

cd src ls redis-server:Redis 服务本身 redis-sentinel:Redis Sentinel 集群可执行程序(用于监控和故障转移) redis-cli: Redis 命令行客户端程序 redis-benchmark: 检测 Redis 性能的工具 redis-check-aof 和 redis-check-rdb (Redis 版本 3.0 及以下为 redis-check-dump):为极少数数据损坏情况下的有力工具

 

1.2 运行

如果只是为了了解和测试 Redis 的话,直接执行 .\redis-server 即可运行一个 Redis 实例,默认监听在 6379 端口。但如果是将 Redis 用于更正式的环境,则需要进行一定的配置:

1)首先将 redis-server 和 redis-cli 复制到系统可执行文件目录下(通常是 /usr/local/bin),这样执行时不需要切换到编译目录即可执行;另外也可以在编译时使用 make install 命令进行安装达到同样目的。

 

2)准备一个适当的 Redis 配置文件,在源代码根目录有一个示例(redis.conf),可以根据实际需求进行修改,下面是 redis.conf 配置参数说明:

# Redis 配置文件示例 # # 注意:要使 Redis 运行时读取本配置文件的话,需要在运行时指定配置文件路径: # ./redis-server /path/to/redis.conf # 当涉及到内存大小时,可以使用常用单位例如 1k 5GB 4M 等等,单位换算如下: # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 1024*1024 bytes # 1g => 1000000000 bytes # 1gb => 1024*1024*1024 bytes # 以上单位不区分大小写,所以 1GB 1Gb 1gB 都是同一个意思。 ################################## 包含 ################################### # include 指令的意思是包含其它配置文件,当有多个 Redis 服务需要配置,但其中少数参数有区 # 别时,则可以将公共的配置放入到一个公共的配置文件中,然后通过子配置文件引入父配置,从而 # 将配置按照模块分开。 # # 注意:“include” 指令不受来自 admin 或 Redis Sentinel 的 “CONFIG REWRITE” 影响(不会 # 被重写)。 # 如果存在多个相同指令的不同参数设置,Redis 总是使用最后一次的设置,因此你最好把 “include” 放在 # 文件的开始处,以避免在运行时被后面的文件重写。 如果相反,你希望使用 “include” 来覆盖这些 # 配置选项,则最好把它放在配置文件末尾。 # # include /path/to/local.conf # include /path/to/other.conf ################################## 模块 ##################################### # 在启动时加载模块,如果加载失败则启动过程终止。可以同时加载多个模块。 # # loadmodule /path/to/my_module.so # loadmodule /path/to/other_module.so ################################## 网络 ##################################### # 默认如果没有 "bind" 指令设置的话, Redis 默认监听所有接口。可以使用 "bind" 监听 # 指定网络接口。可以同时指定一个或多个 IP 地址。 # # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 # # ~~~ 警告 ~~~ 如果 Redis 所在服务器直接暴露在互联网,那么监听所有网络接口是一件 # 危险的事情。所以默认我们在下面设置了只监听环回地址,当然如果你明确了解了这些配置 # 的含义,你可以自行调整配置参数。 # # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ bind 127.0.0.1 # 保护模式是一种安全保护,目的在于避免 Redis 实例暴露在互联网遭到未授权访问和攻击。 # 当保护模式开启时,如果: # 1) 服务器没有使用 "bind" 指令明确监听某个接口。 # 2) 服务器没有设置访问密码。 # 那么服务器仅接收来自 127.0.0.1(IPv4) 和 ::1(IPv6), 以及 Unix domain sockets # 的连接。 # # 保护模式默认开启。 protected-mode yes # 指定监听端口,默认为 6379。 # 如果指定了端口 0,则代表 Redis 不监听任何 TCP 协议。 port 6379 # TCP listen() backlog. # # 在高并发的场景你可能需要设置一个较高的 backlog 参数来避免客户端连接问题。注意 # Linux 内核对并发连接数也有限制,通常在 /proc/sys/net/core/somaxconn。所以需 # 要同时调高 somaxconn 和 tcp_max_syn_backlog 参数。 tcp-backlog 51


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有